package rohyunji;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class J01_HelloJDBC {

	/*
	 JDBC
	 데이터베이스에 접근하고 조직하는 것은 아주 중요한 주제중의 하나
	 
	 데이터베이스에는 여러 브랜드가 있음 
	 Oracle,MySQL,MSSQL 등등
	 모든 데이터베이스 서버는 독점적인 방식을 통해 접근하고 관리하도록 허용됨
	 따라서,각각의 데이터베이스에 접근하려면 각 브랜드가 제공하는 기술을 사용해야함
	 
	 운좋게도 자바에서는 서로 다른 데이터베이스에 통일된 방식으로 접근하게 하는
	 JDBC를 제공함
	 Java 7은 JDBC 4.1을 제공
	 JDBC Core API: java.sql 패키지
	 JDBC Optional API: javax.sql 패키지
	 
	 JDBC Driver
	 데이터베이스 제조사가 제공하는 라이브러리
	 각 제조사는 자신만의 독점적인 기술을 이 라이브러리에 포함 시켜둠
	 이것을 JDBC API라는 통일된 코드를 이용해서 데이터베이스를 제어할수 있음 
	 
	 
	 데이터베이스 접근5단계
	 
	 1.데이터베이스에 접근하기 위해 JDBC 드라이버 불러오기
	 2.데이터베이스 연결 열기
	 3.실행할 SQL 문장을 만들기 위해 
	 	Statement/
	 	PreparedStatement(훨씬더 나음,보안면에서..그래서바로배움) 
	 	객체생성
	 4.SQL문장을 실행하고 데이터베이스로부터 넘어온 결과를 처리하기위해
	 	ResultSet객체를 생성 
	 5.모든처리가 끝나면 JDBC 자원해제 	
	 
	 Oracle JDBC 드라이버등록 
		
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		final String DRV="oracle.jdbc.driver.OracleDriver";
		final String URL="jdbc:oracle:thin:@112.216.253.125:1521:xe";
		final String USR="rohji";
		final String PWD="rohji";
		
		//mysql 데이터베이스 연결정보
		//drv="com.mysql.jdbc.driver"
		//url="jdbc:mysql://112.216.253.125:3306/zipcode"
		//usr="zipcode"
		//pwd="zipcode"
		
		Connection conn=null;//연결
		PreparedStatement pstmt=null,pstmt1=null;//질의
		ResultSet rs=null,rs2=null; //결과
		String SQL="select *from employees";
		String SQL1="select *from departments";
		
		
		
		//1.JDBC 드라이버 불러오기 
		//JDBC 관련코드 작성시 예외처리를 위해 
//		try-catch-finally를 작성해 둘것
		try
		{
			//1.JDBC 드라이버 불러오기
			//Class:클래스에 대한 객체를 동적으로 생성 
			
			Class.forName(DRV);
			
			
			//2.데이터베이스 연결
			conn=DriverManager.getConnection(URL,USR,PWD);
			
			//실행할 SQL질의 작성
			pstmt=conn.prepareStatement(SQL);
			pstmt1=conn.prepareStatement(SQL1);
			//SQL 질의를 실행하고 결과를 받음
			rs=pstmt.executeQuery();
			rs2=pstmt1.executeQuery();
			
			//받은 결과를 처리 
			
			if(rs.next())//결과에 데이터가 존재하면!
			{	System.out.println("[Employee Table]");
				System.out.print("id\t email\n\n");
				do
				{
					
					System.out.print(rs.getString(1)+"\t");
					System.out.println(rs.getString(4));//employee_email
				}
				while(rs.next());
			}
			else System.out.println("데이터없어염");
			
			if (rs2.next())
			{
				System.out.println("[Departments Table]");
				System.out.print("id\t 부서명\n\n");
				do{
					System.out.print(rs2.getString(1)+"\t");
					System.out.println(rs2.getString(2));
				}while(rs2.next());
			}
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			if(rs!=null || rs2!=null)
			{
				try{rs.close();rs2.close(); rs=null; rs2=null;}
				catch(Exception e){}
			}
			if(pstmt!=null)
			{
				try{rs.close();rs2.close(); pstmt=null;pstmt1=null;}
				catch(Exception e){}
			}
			if(conn!=null)
			{
				try{rs.close(); rs2.close(); conn=null;}
				catch(Exception e){}
			}
			
		}
	}

}
